package com.lxh.student.util;


import com.lxh.student.common.Const;
import com.lxh.student.vo.output.LoginInfoVo;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * token令牌生成工具
 */
public class TokenUtils {

    //生成token令牌方法
    public static String getToken(LoginInfoVo infoVo,Long times){//infoVo是要传到前端需加密成token的数据，tims是设定的token令牌生效时长
        //以毫秒为单位，获取当前系统时间
        long l = System.currentTimeMillis();
        //生成token字符串
        return Jwts.builder()
                //自定义需要存放的数据
                .claim("type", infoVo.getType())
                //一般用来保护用户的主键
                .setId(infoVo.getUserId().toString())
                //载荷  一般可以设置用户名
                .setSubject(infoVo.getUsername())
                //设置签发时间
                .setIssuedAt(new Date(l))
                //设置令牌签发到期时间
                .setExpiration(new Date(l+times))
                //设置编码方式和签名秘钥(lxhstu)
                .signWith(SignatureAlgorithm.HS256, Const.TOKEN_SING)
                .compact();

    }


    //解析token令牌字符串方法
    public static Claims parseToken(String token){
        return (Claims) Jwts.parser()
                //使用密钥解析token
                .setSigningKey(Const.TOKEN_SING)
                .parse(token)
                //获取解析出来的数据
                .getBody();
    }


}
